import numpy as np
import matplotlib

matplotlib.use('TkAgg')  # 或 'Qt5Agg'/'Agg'，根据环境选择
import matplotlib.pyplot as plt  # pip install matplotlib

# 1. 准备数据
months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
sales_2023 = [150, 210, 180, 240, 200, 280]
sales_2024 = [170, 190, 220, 260, 230, 310]

# 2. 创建图表基础
fig, ax = plt.subplots(figsize=(10, 6), facecolor='#f0f0f0')  # 设置画布大小和背景色
plt.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文显示问题

# 3. 绘制双折线
ax.plot(months, sales_2023,
        marker='D',  # 菱形标记
        linestyle='-',  # 实线
        color='#1f77b4',  # 蓝色
        linewidth=2.5,  # 线宽
        markersize=8,  # 标记大小
        label="2023年销售额")

ax.plot(months, sales_2024,
        marker='s',  # 方形标记
        linestyle='--',  # 虚线
        color='#ff7f0e',  # 橙色
        linewidth=2.5,
        markersize=8,
        label="2024年销售额")

# 4. 添加数据标签
for i, (v23, v24) in enumerate(zip(sales_2023, sales_2024)):
    ax.text(i, v23 + 5, f'{v23}万', ha='center', fontsize=9)  # 2023数据标签
    ax.text(i, v24 + 5, f'{v24}万', ha='center', fontsize=9)  # 2024数据标签

# 5. 添加图表元素
ax.set_title("2023-2024年月度销售额趋势", fontsize=16, pad=20)
ax.set_xlabel("月份", fontsize=12)
ax.set_ylabel("销售额（万元）", fontsize=12)
ax.grid(True, linestyle=':', alpha=0.7)  # 网格线
ax.legend(loc='upper left', framealpha=0.9)  # 图例

# 6. 添加参考线
ax.axhline(y=250, color='r', linestyle='-', alpha=0.3)  # 250万基准线
ax.text(5.2, 252, '目标线: 250万', color='r', fontsize=9)

# 7. 自定义样式
ax.spines['top'].set_visible(False)  # 隐藏顶部边框
ax.spines['right'].set_visible(False)  # 隐藏右侧边框
ax.tick_params(axis='both', which='major', labelsize=10)

# 8. 保存与显示
plt.tight_layout()
# plt.savefig('sales_trend.png', dpi=300, bbox_inches='tight')  # 保存高清图片
plt.show()
